
//2982.找出出现至少三次的最长特殊子字符串II
class Solution {
public:
    int maximumLength(string s) {
        //使用一次滑动窗口
        unordered_map<string ,int> m;
        int n=s.size();
        int i=0;
        while(i<n)
        {
            int start=i;
            while(i<n&&s[start]==s[i]) i++;
            //此时相同字符串的长度为i-start
            int len=i-start;
            string str(s.begin()+start,s.begin()+i);
            for(int k=len;k>=len-2&&k>0;k--)
                m[str.substr(0,k)]+=len-k+1;  //进行统计
        }
        //所有相同的字符串都存储到m中了，找长度最长的并且有3个
        int ret=-1;
        for(auto& [str,k]:m)
        {
            if(k>=3) ret=max(ret,(int)str.size());
        }
        return ret;
    }
};